package py.com.sole.solesys;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
import py.com.sole.dao.DaoFactory;
import py.com.sole.model.Materia;



@ManagedBean
@SessionScoped
public class MateriaBean implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -2342342342342L;
	private int id;
	private String descripcion;
	private List<Materia> materias;
	private Materia materiaSelected;
	private Materia materiaDelSelected;
	private List<Materia> listaMatSelec;
	private List<Materia> seleccionados;
	private boolean bloquearBotones = true;
	

	
	@PostConstruct
	private void init() {
		listaMatSelec= new ArrayList<Materia>();
    materias = DaoFactory.getMateria().getMaterias();
	}
	
	
	public void clean() {
		this.descripcion = null;
		this.materiaSelected = null;
		this.bloquearBotones = true;
		
	}

	public void addMateria() {
		FacesContext context = FacesContext.getCurrentInstance();

		for (Materia mat : materias) {

			if (mat.getDescripcion().equals(descripcion)) {
				context.addMessage(null, new FacesMessage("Advertencia",
						"La materia " + descripcion
						+ " ya se encuentra registrada"));
        this.clean();
				return;
			}
		}

		Materia materia = new Materia();
		materia.setDescripcion(descripcion);
    materia.setActivo(true);
		DaoFactory.getMateria().addMateria(materia);
		context.addMessage(null, new FacesMessage("Mensaje", "Materia "
				+ descripcion + " almacenada exitosamente"));
    
    materias = DaoFactory.getMateria().getMaterias();

		this.clean();
	}

	public void deleteMateria() {
    
		//DaoFactory.getMateria().deleteMateria(this.getMateriaSelected().getId());
    Materia materia = DaoFactory.getMateria().getMateriaById(
				this.getMateriaSelected().getId());
		FacesContext context = FacesContext.getCurrentInstance();
		materia.setDescripcion(descripcion);
    materia.setActivo(false);
		DaoFactory.getMateria().updateMateria(materia);
		context.addMessage(null, new FacesMessage("Mensaje", "Materia "
				+ descripcion + " eliminada exitosamente"));
    materias = DaoFactory.getMateria().getMaterias();
    this.clean();
	}

	public void editMateria() {
		Materia materia = DaoFactory.getMateria().getMateriaById(
				this.getMateriaSelected().getId());
		FacesContext context = FacesContext.getCurrentInstance();
		materia.setDescripcion(descripcion);
		DaoFactory.getMateria().updateMateria(materia);
		context.addMessage(null, new FacesMessage("Mensaje", "Materia "
				+ descripcion + " almacenada exitosamente"));

    materias = DaoFactory.getMateria().getMaterias();
    
		this.clean();
	}

	public void onRowSelect(SelectEvent event) {
		this.materiaSelected = ((Materia) event.getObject());
		this.descripcion = this.materiaSelected.getDescripcion();		
		this.bloquearBotones = false;
		RequestContext.getCurrentInstance().update("materia-form:dtMat");
	}
	


	public void searchMaterias() {
		List<Materia> materias = DaoFactory.getMateria().getMaterias();

		if (materias.isEmpty()) {
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Resultado de la consulta", "No se encontraron registros");
			FacesContext.getCurrentInstance().addMessage(null, message);
		} else if (materias.size() == 1) {
			this.setDescripcion(materias.get(0).getDescripcion());

			RequestContext.getCurrentInstance().update("materia-form");
		} else {
			this.materias = materias;
		}
	}

	public void guardarListener() {

	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public List<Materia> getMaterias() {
		materias = DaoFactory.getMateria().getMaterias();
		return materias;
	}

	public void setMaterias(List<Materia> materias) {
		this.materias = materias;
	}

	public Materia getMateriaSelected() {
		return materiaSelected;
	}

	public void setMateriaSelected(Materia materiaSelected) {
		this.materiaSelected = materiaSelected;
	}

	public boolean isBloquearBotones() {
		return bloquearBotones;
	}

	public void setBloquearBotones(boolean bloquearBotones) {
		this.bloquearBotones = bloquearBotones;
	}

	public List<Materia> getListaMatSelec() {
		return listaMatSelec;
	}

	public void setListaMatSelec(List<Materia> listaMatSelec) {
		this.listaMatSelec = listaMatSelec;
	}


	public Materia getMateriaDelSelected() {
		return materiaDelSelected;
	}


	public void setMateriaDelSelected(Materia materiaDelSelected) {
		this.materiaDelSelected = materiaDelSelected;
	}


	public List<Materia> getSeleccionados() {
		return seleccionados;
	}


	public void setSeleccionados(List<Materia> seleccionados) {
		this.seleccionados = seleccionados;
	}



}
